package map;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;

public class MapDemo2 {
    public static void main(String[] args) {
        Map<String, Integer> map = new LinkedHashMap<>();
        map.put("语文", 92);
        map.put("数学", 91);
        map.put("英语", 94);
        map.put("物理", 91);
        map.put("化学", 93);
        System.out.println(map);
        /*
        遍历所有的key
        set<k>  keySet()
        将当前map中所有的key以一个set集合形式返回，遍历这个集合就等于遍历了所有的key
         */

        Set<String> keySet = map.keySet();
        /*for (String key : keySet){
            System.out.println("key:" + key );
        }*/
        keySet.forEach(key -> System.out.println("key: " + key));
        //当lambda表达式 前面 参数和 后面方法参数一致时还能简写
        //keySet.forEach(System.out::println);


        /*
        遍历每一组键值对
        Set<Entry> entrySet()

        Map.Entry它的每个实例用于表示Map中的一组键值对
        Entry有两个常用的方法：
        getKey(),getValue()分别用于获取其表示的键值对中的key和value
         */
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        for (Map.Entry<String, Integer> e : entrySet) {
            String key = e.getKey();
            Integer value = e.getValue();
            System.out.println(key + ":" + value);
        }


        /*
        遍历所有的value
        Collection<V> values()
        将当前Map中所有的value值以集合形式返回，遍历该集合等于遍历所有的value
         */

        Collection<Integer> values = map.values();
        for (Integer value : values) {
            System.out.println("value:" + value);
        }


        /*
        集合中，forEach方法会将集合每个元素都拿到并调用Consumer的accept方法陆续传入
         */

       /* keySet.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });*/

        //keySet.forEach(s -> System.out.println(s));
        //keySet.forEach(System.out::println);

        /*
        Map也提供forEach
         */
        map.forEach((k, v) -> System.out.println(k + ":" + v));

    }
}
